perm filename TBOX2.FAI[CMS,LCS] blob
sn#351025 filedate 1978-04-25 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00005 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TBOX
C00005 00003 INPUT WAIT
C00007 00004 Byte input routine
C00009 00005 Bit spreading table
C00011 ENDMK
C⊗;
TITLE TBOX
.INSERT MAC748.FAI[CMS,LCS]
CMD ← 1 ↔ N ← 2 ↔ T ← 3 ↔ K ← 0
SW0 ← 4 ↔ SW1 ← 5 ↔ SW2 ← 6 ↔ AD ← 7
XTAL ← =5000000
BRATE ← =9600 ;Baud rate
TBIT ← ((=10000000/BRATE)/((=10000000/XTAL)*=15))/2
ROW0 ← 357 ↔ ROW1 ← 337
SBITS ← 60
JMP RST ;RESET VECTOR
0
DISXI ;EXTERNAL INTERRUPT VECTOR
NOP
NOP
NOP
DISTI ;TIMER INT VECTOR
RETR
RST: MOVI 377 ;SETUP INPUT PORTS
OUTB
OUTP 1
OUTP 2
CALL CLED ;Clear leds
CLRA ;Zero A for input byte
MOVAT ;Setup timer
STRTT
JMP SETFLG
; Set scan flag and timer
UPFLG: DJNZ T,CKIN
SETFLG: MOVRI T,4 ;4 = 96 ms
CLRF0 ;Set scan flag
;INPUT WAIT
OFFSET ← TBIT/2
INWAI: JTF UPFLG ;CHECK IF TIMER TIME OUT
CKIN: JT0H INWAI ;CHECK FOR START BIT
MOVRI N,OFFSET-4
CENTER: DJNZ N,CENTER ;Wait for center of bit
JT0H INWAI ;Check if valid start bit
MOVRI CMD,11 ;# of bits -1
ILOOP: CALL IWAI
DJNZ CMD,ILOOP
ROLC ;Shift out stop bit
JCC GAD ;Check for good stop bit.
MOVAR CMD ;Save led command
CALL CLED ;Clear leds
JF0S OSWTCH ;Check if time to scan.
JMP SCAN
; Output switches
OSWTCH: MOVRA SW0
CALL OBYTE
MOVRA SW1
CALL OBYTE
MOVRA SW2
CALL OBYTE
CLRA
JT1H ADZRO ;↑BUS←377
INB ;t¬WR¬RD ≥ ICYC*40
CPLA ;Get true bits
JNZ ADZRO
INCA ;Force AD non zero
ADZRO: CALL OBYTE
MOVRA CMD ;Write leds
RORC ;Get cal led
ANI 7
JZ GAD+1
OUTB ;Mode led (1-7)
GAD: CLRA
JCC INWAI
OUTB ;Write cal led
JMP INWAI
; Byte input routine
IWAI: MOVRI N,TBIT-6
WAI: DJNZ N,WAI
CLRC
JT0H BITON
NOP
RORC
RET
BITON: CPLC
RORC
RET
;Clear leds
CLED: MOVI 370
CLRL: OUTB ;Clear led loop
INCA
JNZ CLRL
RET ;Return with BUS ← 377
; Output Acc. to SI/O line
OBYTE: MOVRI K,11 ;# of bits -1
CPLA ;Invert output
CLRC
CPLC
ROLC ;Start bit
OLOOP: OUTP 1 ;Output bit
RORC
MOVRI N,TBIT-3
OWAIT: DJNZ N,OWAIT
DJNZ K,OLOOP
ANPI 1,376 ;Stop bit
ORPI 1,376 ;Fix port for input
MOVRI N,TBIT-10
SWAIT: DJNZ N,SWAIT
NOP
RET
; Bit spreading table
LOC 674 ;674 = Start of page one
0 ↔ 1 ↔ 4 ↔ 5 ↔ 20 ↔ 21 ↔ 24 ↔ 25
100 ↔ 101 ↔ 104 ↔ 105 ↔ 120 ↔ 121 ↔ 124 ↔ 125
SCAN: CPLF0 ;Reset scan flag
ORBI SBITS ;Turn off rows
ANBI ROW0
INP 1 ;Scan row 0
CPLA
MOVAR SW0 ;Save it
ANI 17 ;Get low nibble
MOVPD ;Get bits from spread table
XCHR SW0
SWAP ;Swap high low nibbles
ANI 17 ;Get high nibble
MOVPD
MOVAR SW1
ORBI SBITS
ANBI ROW1
INP 1 ;Scan row 1
ORBI 377 ;Last ¬WR on bus
CPLA
MOVAR SW2 ;Save row 1
ANI 17 ;Low nibble
MOVPD
ROL ;Shift + bits
ORR SW0 ;Or into - bits
ANI 374 ;Clear teach and off bits.
MOVAR SW0
MOVRA SW2 ;Get row 1 again
SWAP
ANI 17
MOVPD
ROL
ORR SW1
MOVAR SW1
INP 2 ;Get push buttons
CPLA
MOVAR SW2
ANI 177 ;Zero spare bit
XCHR SW2
ROLC ;Shift & swap teach & off bits
ROL
ROLC
ANI 3
ORR SW0
MOVAR SW0
JMP OSWTCH
LOC 2272
0 ;This is for a block of zeros
END